package controller;

import entity.User;
import javafx.event.ActionEvent;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.scene.control.*;
import javafx.stage.Stage;
import service.UserService;
import service.impl.UserServiceImpl;
import util.ThreadManagement;

import java.io.IOException;

/**
 * 注册界面控制类
 *
 * @author Mr.Alpaca
 * @version 1.0.0
 */
public class LoginController {
    public TextField idText;
    public Label idLabel;
    public TextField passwordText;
    public Label passwordLabel;
    public Button loginBtn;
    /**
     * 服务类
     */
    private final UserService service = UserServiceImpl.getService();

    /**
     * 登录按钮动作:
     * 1.获取输入的账号和密码
     * 2.验证登录是否成功，成功则3,失败则4
     * 3.弹窗提示,跳转到聊天室界面
     * 4.弹窗提示,清空已填入信息
     *
     * @param actionEvent 按钮事件
     */
    public void onLogin(ActionEvent actionEvent) {
        long id = Long.parseLong(idText.getText());
        String password = passwordText.getText();
        // 调用服务验证登录,并根据结果执行动作
        boolean reason = service.login(id, password);
        if (reason) {
            success(id);
        } else {
            fail();
        }
    }

    /**
     * 登录成功动作:
     * 1.提示信息
     * 2.进入聊天室
     * 3.关闭当前注册界面
     */
    private void success(long id) {
        // 提示消息
        alertMessage("登录成功");
        // 获取用户对象并创建一个线程接收信息
        User user = service.getUser(id);
        ThreadManagement.startReceiveThread(user);
        // 进入聊天窗口
        try {
            Stage stage = new Stage();
            FXMLLoader loader = new FXMLLoader(getClass().getResource("/fxml/forum.fxml"));
            Parent root = loader.load();
            // 传递当前操作用户对象到控制器中
            ForumController controller = loader.getController();
            controller.passUser(user);
            stage.setTitle("聊天室");
            stage.setScene(new Scene(root));
            stage.setResizable(false);
            stage.show();
        } catch (IOException e) {
            System.out.println(e.getMessage());
        }
        // 关闭当前界面
        closeCurrentStage();
    }

    /**
     * 登陆失败动作:
     * 1.提示信息
     * 2.清空已填入信息
     */
    private void fail() {
        // 提示消息
        alertMessage("登陆失败");
        // 清空已填入信息
        idText.setText("");
        passwordText.setText("");
    }

    /**
     * 弹出提示框提示指定消息
     *
     * @param message 提示信息
     */
    private void alertMessage(String message) {
        Alert alert = new Alert(Alert.AlertType.CONFIRMATION, message, ButtonType.FINISH, ButtonType.CLOSE);
        alert.showAndWait();
    }

    /**
     * 关闭当前界面
     */
    private void closeCurrentStage() {
        ((Stage) idText.getScene().getWindow()).close();
    }
}
